const router = require('express').Router();// 分发请求
const visualModel = require('../../models/visualModel');// 执行sql语句的模块
const Jwt = require('../../common/jwt');//处理token的工具 json web token

const _ = require('lodash');
const dayjs = require('dayjs');

// 最近30天
function last30dates() {
    const endDayjs = dayjs();
    const endYear = endDayjs.year();
    const endMonth = endDayjs.month() + 1;
    const endMonthString = endMonth < 10 ? '0' + endMonth.toString() : endMonth.toString();
    const endDate = endDayjs.date();
    const startDayjs = dayjs().subtract(29, 'days');
    const startYear = startDayjs.year();
    const startMonth = startDayjs.month() + 1;
    const startMonthString = startMonth < 10 ? '0' + startMonth.toString() : startMonth.toString();
    const startDate = startDayjs.date();
    const dates = [];
    if (endMonth === startMonth) {
        // 同一个月，直接改变天数
        _.each(_.range(startDate, endDate + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${endYear}-${endMonthString}-${item}`);
        });
    } else if (endMonth === startMonth + 1 || startMonth - endMonth === 11) {
        // 上一个月和当前月
        // 上个月
        _.each(_.range(startDate, startDayjs.daysInMonth() + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${startYear}-${startMonthString}-${item}`);
        });

        // 当前月
        _.each(_.range(1, endDate + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${endYear}-${endMonthString}-${item}`);
        });
    } else if (endMonth === startMonth + 2) {
        // 上上个月、上个月和当前月，遇到 2 月时
        // 上上个月
        _.each(_.range(startDate, startDayjs.daysInMonth() + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${startYear}-${startMonthString}-${item}`);
        });

        // 2 月
        _.each(_.range(1, startDayjs.add(1, 'months').daysInMonth() + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${startYear}-02-${item}`);
        });

        // 当前月
        _.each(_.range(1, endDate + 1), (item) => {
            if (item < 10) {
                item = '0' + item.toString();
            }
            dates.push(`${endYear}-${endMonthString}-${item}`);
        });
    }

    return dates;
};
// 最近15天
function last15Dates() {
    const today = new Date();
    const last15Days = [];
    for (let i = 0; i < 15; i++) {
        const day = new Date(today);
        day.setDate(day.getDate() - i);
        last15Days.push(day.toISOString().split('T')[0]); // 格式化为 YYYY-MM-DD
    }

    // console.log(last15Days); // 打印最近15天的日期数组
    return last15Days;
}

function last50Dates() {
    const moment = require('moment');
    const last15Days = [];

    for (let i = 0; i < 50; i++) {
        const day = moment().subtract(i, 'days');
        last15Days.push(day.format('YYYY-MM-DD')); // 格式化为 YYYY-MM-DD
    }

    // console.log(last15Days); // 打印最近15天的日期数组
    return last15Days;
}

// 格式化日期时间 例如：2024-01-01
function formatdatetime(str) {
    let dt = new Date(str)
    let yy = dt.getFullYear();
    let mm = dt.getMonth() + 1;
    let dd = dt.getDate();
    mm = mm < 10 ? '0' + mm : mm;
    dd = dd < 10 ? '0' + dd : dd;
    return `${yy}-${mm}-${dd}`
}

//计算时长
function calcparkhours(startstr, endstr) {
    let s = new Date(startstr).getTime();
    let e = new Date(endstr).getTime();
    let times = s < e && (e - s) / 1000;
    let hours = times / 3600;
    let minutes = ((times % 3600 / 60) / 60).toFixed(2) - 0;
    hours = hours + minutes;
    return hours.toFixed(2);
}

// 分发请求
// 统计所有文章数量
// URL: /api/visual/total_article
router.get('/total_article', async (req,res)=> {
    // 获取文章信息
    await visualModel.total_article().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})


// 统计所有用户数量
// URL: /api/visual/total_user
router.get('/total_user', async (req,res)=> {
    // 获取用户信息
    await visualModel.total_user().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

// 根据分类统计所有宠物领养信息数量
// URL: /api/visual/total_pet
router.get('/total_pet', async (req,res)=> {
    // 获取用户信息
    let  {petcategory} = req.query;
    if(petcategory) {
        await visualModel.total_pet(petcategory).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }   
    else {
        res.send({
            code: -1,
            msg: '缺少参数'
        })
    }
   
})

// 分类列表
// URL: /api/visual/classify_list
router.get('/classify_list', async (req,res)=> {
    // 获取用户信息
    await visualModel.classify_list().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

// 统计分类宠物对应的数量
// URL: /api/visual/catetory_data
router.get('/catetory_data', async (req,res)=> {
    // 获取用户信息
    await visualModel.catetory_data().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})


// 最近15天发布的领养信息
// URL: /api/visual/catetory_data
router.get('/pet_num', async (req, res) => {
    let data = last15Dates();
    await visualModel.pet_num()
        .then(
            result => {
                if (res.length <= 0) {
                    res.send({
                        code: -1,
                        msg: '暂无数据列表'
                    })
                }
                else {
                    let arr = [];
                    // console.log({data,result})
                    for (let i = 0; i < data.length; i++) {
                            for (let j = 0; j < result.length; j++) {
                                // 记录每天发布的数据
                                let endtimestr = formatdatetime(result[j].pet_create_time)
                                console.log(endtimestr , data[i])
                                if (endtimestr && endtimestr == data[i]) {
                                    let obj = {};
                                    obj.petname = result[j].petname;
                                    obj.datetime =  data[i];
                                    arr.push(obj)
                                }
                            }
                    }


                  
                    // 去重
                    let obj2 = {};
                    for(let index = 0 ; index < arr.length ; index ++){
                        let key = arr[index].datetime;
                        if(obj2[key]==undefined){
                            obj2[key] = {}
                            obj2[key].opt = {}
                            obj2[key].opt.num = 1;
                            obj2[key].opt.datetime = arr[index].datetime;
                        }
                        else {
                            // 统计每天发布的信息
                            obj2[key].opt.num += 1;
                        }
                    }
                    // 整合数据
                    let newData = []
                    for(let key in obj2){
                        newData.push(obj2[key].opt)
                    }
                 
                    res.send({
                        code: 200,
                        msg: '最近15天的每天发布的信息数量',
                        result: newData
                    })
                }

            },
            err => {
                res.send(err)
            }
        )
})

// 统计分类宠物总数量
// URL: /api/visual/total_pet_all
router.get('/total_pet_all', async (req,res)=> {
    // 获取用户信息
    await visualModel.total_pet_all().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

//获取某分类的所有的宠物信息，包括age、localstation、myname、myphone、petcategory、petimg、petinsectnum、petname、petsterilizationnum、petstory、petvaccinumnum、sex
// URL: /api/visual/pet_list
router.get('/pet_list', async (req,res)=> {
    // 获取用户信息
    let  {petcategory} = req.query;
    if(petcategory) {
        await visualModel.pet_list(petcategory).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }   
    else {
        res.send({
            code: -1,
            msg: '缺少参数'
        })
    }
   
})

// //获取单个宠物详情，包括age、localstation、myname、myphone、petcategory、petimg、petinsectnum、petname、petsterilizationnum、petstory、petvaccinumnum、sex
// // URL: /api/visual/pet_detail
router.get('/pet_detail', async (req,res)=> {
    // 获取用户信息
    let {petid} = req.query;
    if(petid) {
        await visualModel.pet_detail(petid).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }   
    else {
        res.send({
            code: -1,
            msg: '缺少参数'
        })
    }
   
})

// 统计所有收藏数量
// URL:  /api/visual/total_collect
// 请求方式：get
router.get('/total_collect', async (req,res)=> {
    // 获取收藏信息
    await visualModel.total_collect().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

module.exports = router;